## DESCRIPTION
## Algebra: algebraic fraction answer requiring simplification
## ENDDESCRIPTION

## KEYWORDS('algebra', 'algebraic fraction answer')

## DBsubject('WeBWorK')
## DBchapter('WeBWorK Tutorial')
## DBsection('Fort Lewis Tutorial 2011')
## Date('01/30/2011')
## Author('Paul Pearson')
## Institution('Fort Lewis College')
## TitleText1('')
## EditionText1('')
## AuthorText1('')
## Section1('')
## Problem1('')


###########################
#  Initialization

DOCUMENT();

loadMacros(
"PGstandard.pl", 
"MathObjects.pl", 
"PGunion.pl",
"parserMultiAnswer.pl",
"PGcourse.pl",
);

TEXT(beginproblem());


##########################
#  Setup

Context("Numeric")->variables->are(y=>"Real");
Context()->{error}{msg}{"Operands of '*' can't be words"} = " ";

$a = random(2,8,2);
$b = random(3,9,2);
$c = random(1,9,1);

while ($c == $b/$a) { $c = random(1,9,1); } 

$fraction = "\frac{$a y}{y-$c} + \frac{$b}{$c - y} ";

$num = Formula("$a y - $b");
$den = Formula("y - $c");

$numbogus = Formula("$a*y+$b");
$denbogus = Formula("(y-$c)*($c-y)");

$multians = MultiAnswer($num, $den)->with(
  singleResult => 0,
  allowBlankAnswers => 1,
  checker => sub {
      my ( $correct, $student, $self ) = @_;
      my ( $f1stu, $f2stu ) = @{$student};
      my ( $f1, $f2 ) = @{$correct};
 
      if ( ( $f1==$f1stu &&  $f2==$f2stu) || 
           (-$f1==$f1stu && -$f2==$f2stu) ) {
          return [1,1];
      } elsif ( $f1==$f1stu || -$f1==$f1stu) {
          return [1,0];
      } elsif ( ($numbogus==$f1stu || -$numbogus==$f1stu) ||
                ($denbogus==$f2stu || -$denbogus==$f2stu) ) {
          $self->setMessage(1,"Find a common denominator first");
          $self->setMessage(2,"Find a common denominator first");
          return [0,0];
      } elsif ( $f2==$f2stu || -$f2==$f2stu ) {
          return [0,1];
      } elsif ( $f1*$f2stu==$f1stu*$f2 ) {
          $self->setMessage(1,"Simplify your answer further");
          $self->setMessage(2,"Simplify your answer further");
          return [0,0];
      } else {
          return [0,0];
      }
  }
);


# 
#  Display the fraction and answer blanks nicely
#
Context()->texStrings;
if ($displayMode eq 'TeX') {
  $showfraction =
  "\[ $fraction = ".$multians->ans_rule(10).$multians->ans_rule(10)." \]";
} else {
  $showfraction =
  ColumnTable(
  "\( \displaystyle $fraction = \)",
  $multians->ans_rule(20).$BR.$HR.$multians->ans_rule(20),
  indent => 0, separation => 10, valign => "MIDDLE"
  );
}
Context()->normalStrings;



#################################
#  Main text

Context()->texStrings;
BEGIN_TEXT
Perform the indicated operations.
Express your answer in reduced form.
$BR
$BR
$BCENTER
$showfraction
$ECENTER
END_TEXT
Context()->normalStrings;


#################################
#  Answer evaluation

$showPartialCorrectAnswers = 1;

install_problem_grader(~~&std_problem_grader);

ANS( $multians->cmp() );


#################################
#  Solution

Context()->texStrings;
BEGIN_SOLUTION
${PAR}SOLUTION:${PAR}
Solution explanation goes here.
END_SOLUTION
Context()->normalStrings;

COMMENT('MathObject version.');

ENDDOCUMENT();
